Reflection API এবং Class Introspection

Mobile App Development - কটলিন (Kotlin) - Kotlin এর Annotations এবং Reflection
231

Reflection API এবং Class Introspection

কটলিনের Reflection API এবং Class Introspection আপনাকে কোডের মেটাডেটা বিশ্লেষণ এবং অবজেক্টের সম্পর্কে বিস্তারিত তথ্য জানতে সাহায্য করে। Reflection API ব্যবহার করে, আপনি ক্লাস, প্রপার্টি, ফাংশন এবং অ্যানোটেশনগুলি নিয়ে কাজ করতে পারেন, যা runtime এ কোডের কার্যকারিতা উন্নত করতে পারে। নিচে Reflection API এবং Class Introspection নিয়ে বিস্তারিত আলোচনা করা হলো।


১. Reflection API

Reflection API কটলিনে কোডের বিভিন্ন বৈশিষ্ট্য এবং আচরণ সম্পর্কে তথ্য সংগ্রহ করতে ব্যবহৃত হয়। এটি kotlin.reflect প্যাকেজে অন্তর্ভুক্ত এবং এর মাধ্যমে আপনি ক্লাসের মেটাডেটা এবং অবজেক্টের স্টেট পরিবর্তন করতে পারেন।

i) KClass

KClass একটি ক্লাসের তথ্য উপস্থাপন করে।

উদাহরণ:

import kotlin.reflect.full.*

class Person(val name: String, val age: Int)

fun main() {
    val personClass = Person::class // Getting KClass reference
    println("Class Name: ${personClass.simpleName}") // আউটপুট: Class Name: Person

    // Listing member properties
    val properties = personClass.memberProperties
    properties.forEach { println("Property: ${it.name}") }
}

ব্যাখ্যা:

  • এখানে Person::class ব্যবহার করে KClass এর একটি রেফারেন্স পাওয়া গেছে এবং ক্লাসের নাম ও প্রপার্টি তালিকাভুক্ত করা হয়েছে।

২. Class Introspection

Class Introspection Reflection API ব্যবহার করে ক্লাসের সদস্যদের সম্পর্কে তথ্য সংগ্রহ করার প্রক্রিয়া। এটি আপনাকে ক্লাসের প্রপার্টি, মেথড, কনস্ট্রাকটর ইত্যাদি সম্পর্কে বিস্তারিত জানতে দেয়।

i) Class Members

ক্লাসের সদস্যদের তালিকা বের করা।

উদাহরণ:

class Vehicle(val make: String, val model: String) {
    fun start() = "Starting $make $model"
}

fun main() {
    val vehicleClass = Vehicle::class

    // Get constructors
    val constructors = vehicleClass.constructors
    constructors.forEach { println("Constructor: ${it.parameters}") }

    // Get member functions
    val functions = vehicleClass.memberFunctions
    functions.forEach { println("Function: ${it.name}") }
}

ব্যাখ্যা:

  • এখানে constructors এবং memberFunctions ব্যবহার করে Vehicle ক্লাসের কনস্ট্রাকটর এবং মেথডের তথ্য পাওয়া গেছে।

৩. Accessing Property Values

Reflection API ব্যবহার করে আপনি ক্লাসের প্রপার্টির মানও অ্যাক্সেস করতে পারেন।

উদাহরণ:

fun main() {
    val vehicle = Vehicle("Toyota", "Corolla")
    val vehicleClass = vehicle::class

    // Accessing property values
    val makeProperty = vehicleClass.memberProperties.find { it.name == "make" }
    println("Vehicle Make: ${makeProperty?.get(vehicle)}") // আউটপুট: Vehicle Make: Toyota
}

ব্যাখ্যা:

  • এখানে memberProperties থেকে make প্রপার্টির মান অ্যাক্সেস করা হয়েছে।

৪. Using Annotations with Reflection

Reflection API ব্যবহার করে আপনি অ্যানোটেশন সম্পর্কিত তথ্যও পেতে পারেন।

উদাহরণ:

@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
annotation class Description(val info: String)

@Description("This class represents a book")
class Book(val title: String)

fun main() {
    val bookClass = Book::class
    val annotation = bookClass.annotations.find { it is Description } as? Description
    println("Book Description: ${annotation?.info}") // আউটপুট: Book Description: This class represents a book
}

ব্যাখ্যা:

  • এখানে Description নামে একটি কাস্টম অ্যানোটেশন তৈরি করা হয়েছে এবং Book ক্লাসে প্রয়োগ করা হয়েছে। Reflection API ব্যবহার করে অ্যানোটেশনটির তথ্য বের করা হয়েছে।

উপসংহার

কটলিনের Reflection API এবং Class Introspection কোডের মেটাডেটা বিশ্লেষণ এবং অবজেক্টের আচরণ সম্পর্কে গভীর তথ্য সংগ্রহ করতে সহায়ক। এটি কোডের ডায়নামিক আচরণ বোঝার জন্য এবং অ্যাপ্লিকেশনগুলিতে গতিশীল কার্যক্রম পরিচালনার জন্য অত্যন্ত কার্যকর।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...